好的,看到標題大家會覺得啊你怎又要喬遷了
沒錯,由於昨天加前天的嘗試
我把原本的aws搞爆了
不過俗話說的好,三折肱而成良醫
經過兩天研究後終於成功架起來啦
所以我們這篇就把前面所有的成見步驟全部拋棄
手把手帶大家重新成功建一個能跑的aws
廢話不多說,咱們累狗~
好的,首先第一步我們當然要先來建立EC2啦
一樣點選左上的新執行個體
然後就一路下一步到Configure Security Group這個地方
上次有一個失誤是我們沒有開8000的port給django用
所以我們這次把8000 port加進來
然後一樣一路下一步到確認環境之後
接下來他會要你選金鑰
這裡為了保險我們再重新申請一個
下一步我們先下載pip3
這裡我們就不偷懶,手把手帶大家安裝
一樣先進去我們的aws實體ssh -i "stonks_key2.pem" ubuntu@你的aws IP
先更新apt-get內所有套件,然後下載pip3
sudo apt-get update
sudo apt install python3-pip
OK,目前為止一切正常
首先一樣執行安裝三步驟
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
接著啟動MySQL
sudo service mysql start
進去看MySQL老闆跟通關密語
sudo cat /etc/mysql/debian.cnf
用老闆的身分跟密碼登入
mysql -u debian-sys-maint -p
接著就是建立root user了
不過很遺憾的是,aws上的MySQL不能直接設root的密碼
那沒關係,山不轉路轉
我們就再創一個人,跟管理者說他是root的親弟弟請給他權限就好
所以我們創建root user步驟會變如下:
USE mysql;
CREATE USER 'django'@'localhost' IDENTIFIED BY 'AmaneKanata';
GRANT ALL ON *.* TO 'django'@'localhost';
FLUSH PRIVILEGES;
這樣就變成說
「您好這位叫做django,他是root的親弟弟,所以請給他跟root一樣的權限謝謝」
然後走之前也別忘了幫創一個stonks_db
CREATE DATABASE stonks_db;
打完收工,高歌離席
為什麼這裡會講相關東東呢
因為這邊要處理的東西真的很多
首先光是django下載就會遇到很多問題
所以我們會依時序一個一個下載下來
首先先處理mySQL的my_config.h
sudo wget https://raw.githubusercontent.com/paulfitz/mysql-connector-c/master/include/my_config.h -O /usr/include/mysql/my_config.h
為啥要處理這個東東呢
因為aws沒有,但是MySQL-python要用上,就是這麼簡單
下一步就是之前提到的configparser問題
一樣先下載configparser
pip3 install configparser
然後把套件複製一套,格式改成MySQL-python可以吃的格式
sudo cp /usr/lib/python3.8/configparser.py /usr/lib/python3.8/ConfigParser.py
一樣由於aws是python3.8,所以路徑裡的python要改成3.8
餿發餿骨
接下來我們終於可以把那兩個傳說中的套件
django跟MySQL-python安裝上去啦
但我們還要額外裝mysqlclient==2.0.1
因為你在後面migrations,極有可能會發生下列問題
AttributeError: module 'MySQLdb.constants.FIELD_TYPE' has no attribute 'JSON' while migrating in Django
所以要把mysqlclient這個東東補上去
pip3 install django
pip3 install MySQL-python
pip3 install mysqlclient==2.0.1
水擱有力
在佈署之前,我們有一些地方要先修改
首先還記得我們前面建立MySQL時用了django名稱而不是root對吧
所以這邊setting.py的DATABASES要改成如下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'stonks_db',
'USER': 'django',
'PASSWORD': 'AmaneKanata',
'HOST': '',
'PORT': '',
}
}
然後由於你的HOST IP要跟著aws
所以記得ALLOWED_HOSTS也要改成
ALLOWED_HOSTS = ["aws的IP"]
然後由於aws的MySQL CharField會有字數限制
所以我們的stonks_index內的models.py要把CharField修改成TextField
from django.db import models
# Create your models here.
class stonks_DB(models.Model):
comp_id = models.IntegerField() #公司代號
year = models.IntegerField() #財報年度
season = models.IntegerField() #財報季度
balance_sheet = models.TextField(max_length = 10000) #負債表
income_statement = models.TextField(max_length = 10000) #損益表
最後還有一個地方要修改
我們進到stonks_index內的migrations資料夾
裡面應該有一個檔案叫做0002_auto_XXXXXXXX_XXXX.py
我們開啟這個檔案
把裡面兩個CharField改成TextField
裡面的py檔應該會變成如下
# Generated by Django 3.2.7 on 2021-09-28 14:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('stonks_index', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='stonks_DB',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('comp_id', models.IntegerField()),
('year', models.IntegerField()),
('season', models.IntegerField()),
('balance_sheet', models.TextField(max_length=10000)),
('income_statement', models.TextField(max_length=10000)),
],
),
migrations.DeleteModel(
name='DBTest',
),
]
好的改完以後,commit
git add .
git commit -m "fix for aws environment"
git push
好的接下來回到aws
創立新資料夾,準備clone
設定使用者資訊
git config --global user.email "你的email"
git config --global user.name "你的github使用者名稱"
clone你的程式碼
https://github.com/konata39/itHome_stonks.git
下python3 manage.py migrate
下python3 manage.py runserver 0.0.0.0:8000
,開跑~
好,沒有跳錯
在url欄輸入(aws IP):8000
好的,經過一番寒徹骨之後總算是讓我們django成功建立在aws上啦
明天我們也會順便把heroku的部分補完
到底heroku沒有console要怎搞呢
咱們下回分解~